package TestSummary;
/**本类用于完成OOP汽车设计综合案例*/
/**[一个父类，两个子类分别重写父类的普通方法]
 * 1.分析事物,得出它的属性和功能
 * 2.提取类中的共同点,向上抽取,形成父类Car
 * 3.子类继承父类后,就拥有的父类的功能
 * 4.如果对父类的功能不满意,可以重写
 * 5.可以封装某些类的属性,如果封装了,就要提供对应的get()/set()
 */
public class TestDesignCar {
    public static void main(String[] args) {
        ///4.创建父类对象进行测试
        Car c = new Car();
        System.out.println(c.getBrand());//默认值null，封装后需get方法获取
        System.out.println(c.getColor());//null
        c.start();
        c.stop();
        //5.创建宝马类对象进行测试
        BWM b = new BWM();
        System.out.println(b.color);//没有封装;五彩斑斓的黑
        b.start();//我的车车启动啦~~~++++宝马启动加速度~~~UPUP
        b.stop();//哎呀吗,我的车车熄火了~
        //6.创建保时捷类对象进行测试
        BSJ j = new BSJ();
        System.out.println(j.color);
        j.start();
        j.stop();
        /*两个匿名对象：只使用一次就弃掉*/
        new BSJ().start();
        new BSJ().stop();
    }
}
//1.创建一个父类，汽车类
class Car{
    //封装
    private  String brand;
    private  String color;
   //定义set和get方法，方便外界使用
    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Car(){ /***手动添加无参构造**/

    }
    public Car(String brand, String color) {///有参构造，参数为属性
        this.brand = brand;
        this.color = color;
    }

    //父类定义普通方法//定义Car类的启动与停止方法
    public void start(){
        System.out.println("我的车车启动啦~~~");
    }
    public void stop(){
        System.out.println("哎呀吗,我的车车熄火了~");
    }
}

//2.创建一个子类BWM宝马继承Car父类
class BWM extends  Car{ //extends继承:【但不能继承父类的构造方法！！】
    String color = "五彩斑斓的黑";//定义成员变量并赋值

    @Override /*子类继承父类后需实现【重写】功能，并用super来调用父类的属性和方法*/
    public void start() {
        super.start();//我的车车启动啦~~~
        System.out.println("宝马启动加速度~~~UPUP");//宝马启动加速度~~~UPUP
    }
}

//3.创建第二个子类保时捷并且继承Car类
class BSJ extends Car{//extends继承后，才可以重写父类的方法:【但不能继承父类的构造方法！！】
    String color ="黑不溜秋的白"; //定义成员变量并赋值

    @Override  /*【子类继承父类】后需实现【重写】功能，并用【super.方法名()】来调用父类的属性和方法*/
    public void stop() {
        super.stop();
        System.out.println("保时捷需要稳停！~~~~");
    }
}